<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Node;
use App\Models\Role;

class RoleController extends BaseController
{
    /**
     * Display a listing of the resource.
     * 查询权限信息
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        //获取搜索框的数据
        $name = $request->get('name');
        //匿名函数中使用外部变量  使用  use
        //分页搜索
        //参数1： 变量值存在， 则执行参数2  -》 匿名函数
        $data = Role::when($name,function($query) use ($name){
            $query->where('name','like',"%{$name}%");
        })->paginate($this->pagesize);
        //查询权限分页信息 
        return view('admin.role.index',compact('data','name'));
    }

    /**
     * Show the form for creating a new resource.
     * 添加角色页面展示
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.role.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //异常处理
        try{
            $this->validate($request,[
                'name' => 'required|unique:roles,name'
            ]);
        }catch(\Exception $e){
            return ['status'=>1000,'msg'=>'验证不通过'];
        }
        //接受all的所有数据
        Role::create($request->only(['name']));
        return ['status' => 0,'msg'=>'角色添加成功'];
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     * 修改
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //查询出当前的信息
        $model = Role::find($id);
        return view('admin.role.edit',compact('model'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        try{
            $this->validate($request,[
                //unique:表名，唯一字段，[排除行的值,以哪个字段来排除]
                //排除id=3的哪行名为name的字段值
                'name' => 'required|unique:roles,name,'.$id.'id'
            ]);
        }catch(\Exception $e){
                return ['status'=>1000,'msg'=>'验证不通过'];
        }
        //修改角色入库
        Role::where(['id'=>$id])->update($request->only(['name']));
        return ['status'=>0,'msg'=>'用户修改成功'];
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(int $id)
    {
        //模型中默认开启来软删除
        Role::find($id)->delete();
        return ['status' => 0,'msg' => '删除成功'];
    }


    //给角色分配权限
    public function node(Role $role){
        // dump($role);//$role指代的是当前的角色数据
        //读取出所有的权限
        // dump($role->nodes);
        // dump($role->nodes()->pluck('name','id')->toArray());
        //读取出所有权限
        $nodeAll = (new Node())->getAllList();
        //读取出当前角色所拥有的权限，使用当前的角色数据去查找对应的权限
        //$role 代表的是当前模型的数据   而且代表的是操作当前角色的数据   查找的也是跟当前角色有关的权限
        $nodes = $role->nodes()->pluck('id')->toArray();
        return view('admin.role.node',compact('role','nodeAll','nodes'));
    }


    //分配处理
    public function nodeSave(Request $request, Role $role){
        //关联模型的数据同步
        //更新当前角色 role_id 对应的权限  node_id  如果传递过来有的话就不懂   没有的话   就添加   多的话就删除    反正始终要保持统一
        $role->nodes()->sync($request->get('node'));   
        return redirect(route('admin.role.node',$role));     
    }




    


    
}
